package com.itheima.d7_method_references;

import java.util.Arrays;
import java.util.Comparator;

/**
 * 目标：掌握特定类型的方法引用。
 *
 * 特定类型的方法引用
 * 类型::方法。
 * 使用场景
 * 如果某个Lambda表达式里只是调用一个实例方法，并且前面参数列表中的第一个参数是作为方法的主调，后面的所有参数都是作为该实例方法的入参的，则此时就可以使用特定类型的方法引用。
 */
public class Test2 {
    public static void main(String[] args) {
        String[] names = {"boby", "angela", "Andy" ,"dlei", "caocao", "Babo", "jack", "Cici"};

        System.out.println("===========默认的sort排序结果========");
        // 进行排序（默认是按照字符串的首字符编号进行升序排序的）
         Arrays.sort(names);
        System.out.println(Arrays.toString(names));

        System.out.println("==========创建Comparator比较器接口的匿名内部类对象后，自定义忽略首字符大小写排序的结果===================");
        // 要求忽略首字符大小写进行排序。
/*        Arrays.sort(names, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // 制定比较规则。o1 = "Andy"  o2 = "angela"
                return o1.compareToIgnoreCase(o2);
            }
        });
        */
        Arrays.sort(names, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareToIgnoreCase(o2);
            }
        });
        System.out.println(Arrays.toString(names));

        System.out.println("==========特定类型的方法引用=========");
        // Arrays.sort(names, ( o1,  o2) -> o1.compareToIgnoreCase(o2) );
        // 特定类型的方法引用！
 //如果某个Lambda表达式里只是调用一个实例方法，并且前面参数列表中的第一个参数是作为方法的主调，后面的所有参数都是作为该实例方法的入参的，则此时就可以使用特定类型的方法引用。
        //o1是形参的第一个，并且是o1调用的方法，而o2是调用的方法里面的入参，符合条件：
        Arrays.sort(names, String::compareToIgnoreCase);
        System.out.println(Arrays.toString(names));
    }
}
